package com.haojiang.mh.remote.base

import android.content.Context
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.haojiang.mh.remote.widget.LoadMoreView

/**
 * 所有下拉刷新下拉加载更多界面adapter基类
 */
abstract class BaseListAdapter<ITEM_BEAN, ITEM_VIEW : View> :
    RecyclerView.Adapter<BaseListAdapter.BaseListHolder>() {

    private var dataList = ArrayList<ITEM_BEAN>()

    fun loadData(list: List<ITEM_BEAN>?) {
        list?.let {
            this.dataList.clear()
            this.dataList.addAll(list)
            notifyDataSetChanged()
        }
    }

    /**
     * 加载更多
     */
    fun loadMore(list: List<ITEM_BEAN>?) {
        list?.let {
            this.dataList.addAll(list)
            notifyDataSetChanged()
        }
    }


    /**
     *用于标识是否为最后一条数据
     */
    override fun getItemViewType(position: Int): Int {
        if (position == dataList.size) {
            //最好一条
            return 1
        } else {
            //普通条目
            return 0
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseListHolder {
        if (viewType == 1) {
            //最后一条 返回加载更多的等待界面
            return BaseListHolder(LoadMoreView(parent.context))
        } else {
            //其他条目
            return BaseListHolder(getItemView(parent.context))
        }
    }


    override fun getItemCount(): Int {
        return dataList.size + 1    //因为需要展示加载item项
    }

    override fun onBindViewHolder(holder: BaseListHolder, position: Int) {
        //如果最后一条，不需要刷新数据
        if (position == dataList.size) return
        // 条目数据
        val data = dataList.get(position)
        // 条目view
        val itemView = holder.itemView as ITEM_VIEW
        //条目刷新
        refreshItemView(itemView, data)
    }

    /**
     * 刷新条目的view
     */
    abstract fun refreshItemView(itemView: ITEM_VIEW, data: ITEM_BEAN)

    /**
     * 获取条目的view
     */
    abstract fun getItemView(context: Context?): ITEM_VIEW

    class BaseListHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    }

}